package service.impl;

import global.Constants;
import global.security.SessionUtils;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import service.UserMetaService;
import util.StringUtils;
import dao.UserMetaDAO;
import domain.UserMeta;

/**
 * 用户元数据Service实现类.
 * <p>
 * 创建日期：2010-07-01<br>
 * 创建人：Xiyt<br>
 * 修改日期：<br>
 * 修改人：<br>
 * 修改内容：<br>
 * 
 * @author Xiyt
 * @version 1.0
 */
public class UserMetaServiceImpl implements UserMetaService {
	/**
	 * 用户元数据DAO
	 * */
	private UserMetaDAO userMetaDao = null;

	/**
	 * 设定用户元数据DAO
	 * */
	public void setUserMetaDao(UserMetaDAO userMetaDao) {
		this.userMetaDao = userMetaDao;
	}

	/**
	 * 根据条件查询用户元数据列表
	 * @param paramUserMeta 用户元数据条件
	 * @return List 用户元数据列表
	 */
	public List<UserMeta> selectByCriteria(UserMeta paramUserMeta) {
		// 取得userMetaList
		List<UserMeta> userMetaList = userMetaDao.selectByCriteria(paramUserMeta);
		return userMetaList;
	}

	/**
	 * 添加用户元数据
	 * @param userMeta 用户元数据
	 */
	public void insert(UserMeta userMeta) {
		// 当前用户ID
		String userId = SessionUtils.getCurrentUserId();
		if(StringUtils.isEmpty(userId)){
			userId = userMeta.getUserId();
		}
		// 状态
		userMeta.setStatus(Constants.STATUS_1);
		// 删除区分：未删除
		userMeta.setDelflag(Constants.DEL_FLAG_1);
		// 系统时间
		Timestamp sysdate = new Timestamp(System.currentTimeMillis());
		userMeta.setCreateUser(userId);
		userMeta.setCreateTime(sysdate);
		userMeta.setUpdateUser(userId);
		userMeta.setUpdateTime(sysdate);
		userMetaDao.insert(userMeta);
	}

	/**
	 * 添加用户元数据
	 * @param userId 用户ID
	 * @param map 配置信息
	 */
	@SuppressWarnings("unchecked")
	public void insert(String userId, Map map){
		Set<String> keySet = map.keySet();
		Iterator<String> ite = keySet.iterator();
		String key = "";
		while (ite.hasNext()) {
			key = ite.next();
			UserMeta userMeta = new UserMeta();
			userMeta.setUserId(userId);
			userMeta.setMetaKey(key);
			userMeta.setMetaValue((String)map.get(key));

			this.insert(userMeta);
		}
	}

	/**
	 * 修改用户元数据
	 * @Description: 修改用户元数据
	 * @param userMeta 用户元数据
	 */
	public void update(UserMeta userMeta) {
		// 状态
		userMeta.setStatus(Constants.STATUS_1);
		// 删除区分：未删除
		userMeta.setDelflag(Constants.DEL_FLAG_1);
		// 系统时间
		Timestamp sysdate = new Timestamp(System.currentTimeMillis());
		userMeta.setUpdateUser(SessionUtils.getCurrentUserId());
		userMeta.setUpdateTime(sysdate);
		userMetaDao.updateByPrimaryKey(userMeta);
	}

	/**
	 * 修改用户元数据
	 * @param userId 用户ID
	 * @param map 配置信息
	 */
	@SuppressWarnings("unchecked")
	public void updateByUserIdAndMetaKey(String userId, Map map){
		Set<String> keySet = map.keySet();
		Iterator<String> ite = keySet.iterator();
		String key = "";
		while (ite.hasNext()) {
			key = ite.next();
			UserMeta userMeta = new UserMeta();
			userMeta.setUserId(userId);
			userMeta.setMetaKey(key);
			if(StringUtils.isNotEmpty((String)map.get(key))){
				userMeta.setMetaValue((String)map.get(key));
			}else{
				userMeta.setMetaValue("");
			}
			userMeta.setStatus(Constants.STATUS_1);// 状态
			userMeta.setDelflag(Constants.DEL_FLAG_1);// 删除区分：未删除
			Timestamp sysdate = new Timestamp(System.currentTimeMillis());// 系统时间
			userMeta.setUpdateUser(SessionUtils.getCurrentUserId());
			userMeta.setUpdateTime(sysdate);

			userMetaDao.updateByUserIdAndMetaKey(userMeta);
		}
	}

	/**
	 * 删除用户元数据
	 * @param userMetaId 用户元数据ID
	 */
	public void delete(Integer userMetaId) {
		// 删除用户元数据
		userMetaDao.deleteByPrimaryKey(userMetaId);
	}
	
	
	/**
	 * 删除用户元数据
	 * @param userId 用户ID
	 */
	public void deleteByUserId(String userId){
		// 删除用户元数据
		userMetaDao.deleteByUserId(userId);
	}
	
	
	/**
	 * 查询用户的收藏夹
	 * @return JSONArray 相册树
	 */
	public JSONArray getFavoriteMenuTree(){
		JSONArray res = new JSONArray();
		// 设定条件
		UserMeta paramUserMeta = new UserMeta();
		paramUserMeta.setUserId(SessionUtils.getCurrentUserId());
		paramUserMeta.setMetaKey("favoriteMenu");
		// 取得笔记分类列表
		List<UserMeta> userMetaList = new ArrayList<UserMeta>();
		userMetaList = this.selectByCriteria(paramUserMeta);
		// 构建树
		JSONObject homePageMenu = new JSONObject();
		homePageMenu.put("id", "homePage");
		homePageMenu.put("text", "我的主页");
		homePageMenu.put("leaf", true);
		homePageMenu.put("attributes", "{url:'"+SessionUtils.getUserMeta().get("homePage")+"'}");
		res.add(homePageMenu);
		
		if(null != userMetaList && userMetaList.size() > 0){
			JSONArray children = new JSONArray();
			for (UserMeta userMeta : userMetaList) {
				String[] menu = userMeta.getMetaValue().split("::");
				JSONObject favoriteMenu = new JSONObject();
				favoriteMenu.put("id", userMeta.getUserMetaId());
				favoriteMenu.put("text", menu[0]);
				favoriteMenu.put("leaf", true);
				favoriteMenu.put("attributes", "{url:'"+menu[1]+"'}");
				children.add(favoriteMenu);
			}
			JSONObject quickMenu = new JSONObject();
			quickMenu.put("id", "0");
			quickMenu.put("text", "快捷菜单");
			quickMenu.put("leaf", false);
			quickMenu.put("children", children);
			res.add(quickMenu);
		}
		return res;
	}
	
	
	/**
	 * 添加快捷菜单
	 * @param userMeta 用户元数据
	 */
	public void addFavoriteMenu(UserMeta userMeta){
		List<UserMeta> userMetaList = this.selectByCriteria(userMeta);
		if(null==userMetaList || userMetaList.size()==0){
			this.insert(userMeta);
		}
	}
}
